(function () {

  // 描述一个对象的类型
  type myType = {
    name: string,
    age: number
  }

  const o: myType = {
    name: '张三丰',
    age: 103
  }

  /**
   * 接口用来定义一个类结构，定义一个类中应该包含哪些属性和方法
   *  同时接口也可以当成类型声明去使用
   */
  interface MyInterface {
    name: string;
    age: number;
  }

  interface MyInterface {
    gender: string;
  }

  const obj: MyInterface = {
    name: '诸葛亮',
    age: 30,
    gender: '男'
  }

  /**
   * 接口可以在定义类的时候去限制类的结构
   *  接口中的所有属性都不能有实际的值
   *  接口只定义对象的结构，而不考虑实际值
   *  在接口中所有的方法都是抽象方法
   */
  interface MyInter {
    name: string;

    sayHello(): void;
  }

  /**
   * 定义类时，可以使类去实现一个接口，实现接口就是使类满足接口的要求
   */
  class MyClass implements MyInter {
    name: string;

    constructor(name: string) {
      this.name = name;
    }

    sayHello(): void {
      console.log('hello ts...');
    }
    
  }


})();